const mongoose = require('mongoose');

// 订单商品子文档 Schema（记录兑换的商品信息）
const orderItemSchema = new mongoose.Schema({
  itemId: { 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'Product', // 关联商品模型
    required: true 
  },
  name: { type: String, required: true }, // 商品名（冗余存储，避免商品删除后信息丢失）
  quantity: { type: Number, required: true, min: 1 }, // 数量（至少 1）
  points: { type: Number, required: true } // 单个商品所需积分（冗余存储）
});

const orderSchema = new mongoose.Schema({
  userId: { 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'User', // 关联用户模型
    required: true 
  },
  createTime: { type: Date, default: Date.now }, // 创建时间（默认当前时间）
  points: { type: Number, required: true }, // 总消耗积分（= 单个积分 × 数量）
  items: [orderItemSchema], // 商品列表（数组）
  type: { 
    type: String, 
    enum: ['菜品', '商品'], // 类型与商品一致
    required: true 
  },
  status: { 
    type: String, 
    enum: ['待发货', '待收货', '已发货', '已收货', '已取消'], // 状态限制
    default: '待发货' // 默认状态为待发货
  },
  address: { // 收货地址（冗余存储，避免用户修改地址后订单信息丢失）
    receiver: { type: String, required: true },
    phone: { type: String, required: true },
    address: { type: String, required: true }
  }
});

module.exports = mongoose.model('Order', orderSchema);